package sistemaAcademico.interfaceUsuario.PessoaMVC.view;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import sistemaAcademico.interfaceUsuario.PessoaMVC.controle.PessoaControlador;
import sistemaAcademico.interfaceUsuario.PessoaMVC.excecao.PessoaNaoEncontradaException;
import sistemaAcademico.interfaceUsuario.PessoaMVC.excecao.PessoaSemCpfException;
import sistemaAcademico.negocio.Pessoa;

public class PessoaFrameCadastrar extends JFrame implements ActionListener, PessoaView {
	private static final long serialVersionUID = 1L;

	// Cria caixas de texto para os dados do cliente
	private JTextField nome = new JTextField(10);
	private JTextField dataNascimento = new JTextField(10);
	private JTextField sexo = new JTextField(10);
	private JTextField cpf = new JTextField(10);
	private JTextField identidade = new JTextField(10);
	private JTextField endereco = new JTextField(10);
	private JTextField telefone = new JTextField(10);
	private JTextField email = new JTextField(10);

	// Cria o botao para salvar o pessoa
	private JButton botao = new JButton("Salvar");

	public PessoaFrameCadastrar() {
		// Atribui o titulo da janela
		setTitle("Cadastro de Pessoas");

		// Diz que o programa deve fechar quando a janela for fechada
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

		// Cria um painel que envolverah os campos da pessoa
		JPanel painel = new JPanel();
		painel.setLayout(new GridLayout(8, 1));
		painel.add(new JLabel("CPF:"));
		painel.add(cpf);
		painel.add(new JLabel("Nome:"));
		painel.add(nome);
		painel.add(new JLabel("Data da nascimento:"));
		painel.add(dataNascimento);
		painel.add(new JLabel("Sexo"));
		painel.add(sexo);
		painel.add(new JLabel("Identidade:"));
		painel.add(identidade);
		painel.add(new JLabel("Endereco:"));
		painel.add(endereco);
		painel.add(new JLabel("Telefone:"));
		painel.add(telefone);
		painel.add(new JLabel("Email:"));
		painel.add(email);

		// Informa que os eventos da caixa de texto do cpf e do botao serao
		// tratados pela propria janela
		cpf.addActionListener(this);
		botao.addActionListener(this);

		// Adiciona uma legenda ao "norte" da janela
		getContentPane().add(new JLabel("Informe os dados da pessoa"),
				BorderLayout.NORTH);
		// Adiciona o painel criado no centro da janela
		getContentPane().add(painel, BorderLayout.CENTER);
		// Adiciona o botao criado no "sul" da janela
		getContentPane().add(botao, BorderLayout.SOUTH);

		// Redimensiona a janela permitindo a visualizacao dos componentes
		pack();
		painel.setSize(400,800);

		// Posiciona no ponto (500,300)
		setLocation(500, 300);
	}

	// Captura eventos
	public void actionPerformed(ActionEvent ev) {
		if (ev.getSource() == botao) {
			try {
				PessoaControlador.salvar(this);
				// JOptionPane.showMessageDialog(this, "Pessoa salva!");
				setVisible(false);
			} catch (PessoaSemCpfException e) {
				JOptionPane.showMessageDialog(this, "Informe o cpf!");
			}
		} else if (ev.getSource() == cpf) {
			try {
				PessoaControlador.carregar(this);
			} catch (PessoaSemCpfException e) {
				JOptionPane.showMessageDialog(this, "Informe o cpf!");
			} catch (PessoaNaoEncontradaException e) {
				nome.setText("");
				dataNascimento.setText("");
				sexo.setText("");
				cpf.setText("");
				identidade.setText("");
				endereco.setText("");
				telefone.setText("");
				email.setText("");
			}
		}
	}

	public Pessoa getPessoa() {
		Pessoa pessoa = new Pessoa();		
					
		pessoa.setNome(nome.getText());
		pessoa.setDataNascimento(dataNascimento.getText());
		pessoa.setSexo(sexo.getText().charAt(0));
		pessoa.setCpf(cpf.getText());
		pessoa.setIdentidade(identidade.getText());
		pessoa.setEndereco(endereco.getText());
		pessoa.setTelefone(telefone.getText());
		pessoa.setEmail(email.getText());		

		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		nome.setText(pessoa.getNome());
		dataNascimento.setText(pessoa.getDataNascimento());
		sexo.setText(pessoa.getSexo() + "");
		cpf.setText(pessoa.getCpf());
		identidade.setText(pessoa.getIdentidade() + "");
		endereco.setText(pessoa.getEndereco());
		telefone.setText(pessoa.getTelefone());
		email.setText(pessoa.getEmail());
	}
	public static void main(String[] args) {
		PessoaFrameCadastrar janela = new PessoaFrameCadastrar();
		janela.setVisible(true);
	}
}
